不好意思,我不只是智能合约!
"互联网计算机(Internet Computer)上的DAPP可以以Web速度运行, 并且能够去信任化的调用彼此公开的API。这得益于Canister(容器), 部署到互联网计算机上且可以通过互联网访问的智能合约。"
综述
Canister(容器)是互联网计算机的基础设施, 也是核心之一。
关于Canister究竟是什么?不同的人有不同的看法:
以太坊开发者可能认为Canister是个智能合约
博士生可能认为Canister是actor模型
系统工程师可能认为Caniser是一个系统进程, 像在操作系统中一样
虚拟机专家可能认为Cansiter是一个WebAssembly模块
图为4只爱吵架的可爱小鸟
是智能合约
1. Canister中存储数据状态,数据状态只能通过区块链中的消息改变, 区块链遵守ICP协议。
2. Canister中代码的执行结果是确定性的, 可以通过审计区块链中消息的方式来审查Canister中的数据状态正确与否。
3. Canister拥有所有传统智能合约的特性, 并且与传统智能合约相比, Canister在构建软件服务的能力上更为出色。
是Actor模型
Actor模型是并行计算领域中的数学模型:在响应消息时,actor可以维护自身状态并响应消息,创建更多的actor。由Dfinity主导开发的motoko语言就受到了actor模型的启发。
Actor模型
2. 单独线程 :一个单独执行的线程, 无需基于锁的同步;
3. 通信 :与其他Canister进行异步通信;
4. 动态创建 :可以创建新的Canister;
5. 消息邮箱 :在Actor模型中, 每个actor都有一个邮箱地址来接受消息。Canister同样也有一个邮箱地址来接受消息, 这个地址看起来像一个IPV6的地址。
互联网计算机对请求的消息进行进一步区分, 分为Update数据改变请求和Query数据访问请求。
数据访问请求不改变数据状态。Canister可以同时处理成千上万的数据访问请求, 数据访问请求的响应速度可以达到毫秒级。
数据改变请求会改变数据状态,需要节点达成共识。Canister对数据改变请求的处理速度受到区块链和单线程执行的限制。
是进程
4. 功能支持:操作系统为进程提供功能支持,互联网计算机也提供了一些API给Canister:
支付功能支持
Canister间通信与调用支持
创建和管理Canister支持
获取系统时间
1. 随机数:互联网计算机的特性是它提供了随机性来源。在未来, Canister将有能力通过API来对比特币/以太坊智能合约进行签名。
是WASM模块
Canister与一个WebAssembly模块实例十分相似, 因为互联网计算机就是使用WebAssembly来实现Canister的。
从技术上讲, Canister的代码部分就是一个引入系统API的WebAssembly模块。并且Canister可以暴露自己的API,其他Canister可以调用这些API。
根据WebAssembly规范 :一个模块实例是一个模块的动态表现, 通过它自身的状态和执行栈来完成。因此,一个Canister是一个WebAssembly实例, 而不仅仅是一个WebAssembly模块,这是一个重要的区别。
Canister使用正交持久性让数据状态永久保存,正交的意思是开发者无需主动保留,维护数据状态不被改变。
所有写入Canister线性内存的的数据都会被追踪:
为了可以让崩溃的WebAssembly模块回滚数据;
当Canister从故障中恢复时, 它将从别的canister中获取数据状态来恢复自己的数据状态。
使用WebAssembly给互联网计算机带来了许多好处:
Canister可以用任意可以编译为WebAssembly的语言编写(Motoko,Rust等),且可以互操作;
WebAssembly是确定性的(除了少数易排除的边缘情况); WebAssembly拥有形式化的语义。
官方表示,未来将与WebAssembly规范一起发展,在新特性足够成熟时添加对他们的支持。
结语
软件Canister是互联网计算机的组成部分,互联网计算机的服务将由许多合作的Canister实现,未来一项拥有10亿用户的服务将可能需要数千个Canister来存储用户数据。
但这不是问题,Canister是为了拓展而设计的,随机时间的推移,Canister将随着拓展变得越来越强大,可以使用大量的Canister来实现服务。